三大范式
1、三大范式
1.1 第一范式(1NF)
确保每列的原子性,要求每列都是不可再分的最小数据单元。每个单一属性必须由基本的数据类型构成,如整数、字符串。
例如,这张表
编号
姓名
性别
联系电话
地址
1
王大宝
男
199000000
广东省广州市新华路tan90 号
问题:现实生活中每个人都有可能不止一个联系电话,而且地址可再分为省份和城市。不符合1NF
优化:
编号
姓名
性别
个人电话
家庭电话
省份
城市
详细地址
1
王大宝
女
15015246623
663323
广东
广州
新华路tan90 号
1.2 第二范式(2NF)
在1NF基础上,要求表中每列都和主键相关,除了主键之外全部列依赖于该主键。
例如,设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键:
订单编号
商品编号
商品名称
数量
单位
商品单价
订单客户
所属单位
联系方式
0001
1
电风扇
5
台
99
王大宝
蓝翔技术
010-10086
问题:商品名称、单位与商品单价与订单编号主键无关,不符合2NF。
优化:
商品表
商品编号
商品名称
单位
商品单价
1
电风扇
台
99
订单项目表
订单编号
商品编号
0001
1
订单信息表
订单编号
订单客户
所属单位
联系方式
0001
王大宝
蓝翔技术
010-100086
1.3 第三范式(3NF)
确保每列都和主键列直接相关, 不可包含间接依赖。
例如,这张表:
课程编号
课程名字
上课时间
任课老师
老师电话
老师职位
101
马克思理论基础
8:00
Lily
18016253155
讲师
102
经济学
14:00
Lucy
18055231233
教授
问题:老师电话和老师职位是直接依赖于任课老师的,而不是直接依赖主键课程编号,是传递依赖,不符合3NF。
优化:
课程表
课程编号
课程名字
上课时间
任课老师
101
马克思理论基础
8:00
Lily
102
经济学
14:00
Lucy
教师表
任课老师
老师电话
老师职位
Lily
18016253155
讲师
Lucy
18055231233
教授
必须先满足第一范式才能满足第二范式,必须同时满足第一第二范式才能满足第三范式
满足三大范式的数据库E-R图实例:
满足三大范式的数据库模型图: